module firecracker_d.models.error; import firecracker_d.models.base_model; /* This file is kind of a mess, but it wraps a FirecrackerError in a D exception, so we can have try-catch bodies whenever we're pushing the models to the Firecracker server. */ struct FirecrackerError { @serializationKeys("fault_message") string faultMessage; this(string responseBody) { faultMessage = responseBody.deserialize!FirecrackerError.faultMessage; } } class FirecrackerException : Exception { public: FirecrackerError error; this(FirecrackerError e, string file = __FILE__, size_t line = __LINE__) { error = e; super(e.faultMessage, file, line); } } import requests; void throwFromResponse(Response r, string file = __FILE__, size_t line = __LINE__) { FirecrackerError e = FirecrackerError(r.responseBody.toString); throw new FirecrackerException(e, file, line); }